﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace TFit
{
    /// <summary>
    /// Класс инкапсулирует логику поведения пользователя. Его настройки и историю подоходов.
    /// </summary>
    public class User
    {
        private String name_  = String.Empty;
        private String password_ = String.Empty;
        private List<Exercise> history_;

        /// <summary>
        /// Возвращает имя пользователя
        /// </summary>
        public String Name 
        {
            get { return name_;}
        }

        /// <summary>
        /// Конструктор класса
        /// </summary>
        /// <param name="name">Имя пользователя</param>
        /// <param name="passw">Пароль</param>
        public User(string name, string passw)
        {
            name_ = name;
            password_ = passw;
            if (File.Exists(name_ + ".dat"))
            {
                LoadHistory();
            }
            else
            {
                history_ = new List<Exercise>();
            }
        }

        /// <summary>
        /// Загрузка истории из файла [Name].dat, находящегося в том же каталоге, что и программа
        /// </summary>
        public void LoadHistory()
        {
            if (File.Exists("history\\"+ this.Name + ".dat"))
            {
                FileStream fStream = File.OpenRead("history\\" + this.Name + ".dat");

                BinaryFormatter binF = new BinaryFormatter();

                history_ = (List<Exercise>)binF.Deserialize(fStream);
                fStream.Close();
            }
            else
            {
                System.Windows.Forms.MessageBox.Show("Отсутствует файл " + this.Name + ".dat","Ошибка",
                    System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation);
            }
        }
        /// <summary>
        /// Сохранение истории в файле [Name].dat
        /// </summary>
        public void SaveHistory()
        {
            FileStream fStream = new FileStream("history\\" + this.Name + ".dat", FileMode.Create, FileAccess.Write, FileShare.None);
            try
            {
                BinaryFormatter binF = new BinaryFormatter();

                binF.Serialize(fStream, this.GetHistory());
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
            finally
            {
                fStream.Close();
            }
        }
        /// <summary>
        /// Возвращает копию истории
        /// </summary>
        /// <returns>История List of Exercise</returns>
        public List<Exercise> GetHistory()
        {
            return history_;
        }
        /// <summary>
        /// Добавить упражнение в историю
        /// </summary>
        /// <param name="ex">Упражнение Exercise</param>
        public void AddExerciseToHistory(Exercise ex)
        {
            history_.Add(ex);
        }
    }
}
